home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Color;
- import java.awt.Event;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Point;
- import java.awt.Toolkit;
- import java.util.NoSuchElementException;
-
- class CEditControl {
- public static final int INDENT = 5;
- private CKeyboard m_keyPrevious = new CKeyboard();
- private CKeyboard m_keyNext = new CKeyboard();
- private String m_strData = "";
- private String m_strMask = "";
- private Color m_rgbText = new Color(0, 0, 0);
- private Color m_rgbBackground = new Color(255, 255, 255);
- private CRect m_rcDraw = new CRect();
- private Font m_Font = new Font("Helvetica", 0, 20);
- private char m_chPrompt = 0;
- private int m_nLimit = 0;
- private int m_nFlags;
- private int m_nSelStart;
- private int m_nCurrPos;
- private CRect m_rcSelection;
- private CRect m_rcInsertPt;
- private Point m_ptText;
- private boolean m_bHasFocus;
- private boolean m_bSelecting;
-
- public boolean ProcessMouseMove(Point var1) {
- this.m_nCurrPos = this.PlaceCursor(var1);
- this.DrawControl();
- return false;
- }
-
- public void GetFocus() {
- CIconObjectList var1 = Globals.CUR_COURSE.m_pCurrentTask.GetResponseManager().m_listIcons;
- CIconObject var2 = null;
- boolean var3 = false;
-
- try {
- var2 = var1.GetHead();
- } catch (NoSuchElementException var5) {
- var3 = true;
- }
-
- while(!var3) {
- if (var2 != null && var2.m_nTypeID == 24 && var2.HasFocus()) {
- var2.ReleaseFocus();
- var2.DrawObject((Graphics)null, 0, (CRect)null);
- }
-
- try {
- var2 = var1.GetNext();
- } catch (NoSuchElementException var4) {
- var3 = true;
- }
- }
-
- this.m_bHasFocus = true;
- if ((this.m_nFlags & 128) != 0) {
- this.AutoSelect();
- }
-
- this.DrawControl();
- }
-
- public void DrawControl() {
- this.DrawControl(Globals.thePresView.GetDC(), this.m_rcDraw);
- }
-
- public void DrawControl(Graphics var1, CRect var2) {
- if (var1 == null) {
- var1 = Globals.thePresView.GetDC();
- }
-
- if (var2 == null) {
- var2 = this.m_rcDraw;
- }
-
- if (var1 != null && var2 != null) {
- Graphics var3 = var1.create();
- String var4 = "";
- var3.setColor(this.m_rgbBackground);
- var3.fillRect(var2.x, var2.y, var2.width - 1, var2.height - 1);
- if ((this.m_nFlags & 16) != 0) {
- var3.setColor(Color.black);
- var3.drawRect(var2.x, var2.y, var2.width - 1, var2.height - 1);
- }
-
- var3.setColor(this.m_rgbText);
- var3.setFont(this.m_Font);
- var4 = this.FormatData();
- var3.clipRect(this.m_rcDraw.x + 5, this.m_rcDraw.y, this.m_rcDraw.width - 6, this.m_rcDraw.height);
- var3.drawString(var4, this.m_ptText.x, this.m_ptText.y);
- if (this.m_bHasFocus) {
- var3.setXORMode(Color.white);
- var3.setColor(Color.black);
- if (this.m_nSelStart != this.m_nCurrPos) {
- this.SetSelection();
- var3.fillRect(this.m_rcSelection.x, this.m_rcSelection.y, this.m_rcSelection.width, this.m_rcSelection.height);
- return;
- }
-
- var3.fillRect(this.m_rcInsertPt.x, this.m_rcInsertPt.y, this.m_rcInsertPt.width, this.m_rcInsertPt.height);
- }
- }
-
- }
-
- public void SetMask(String var1) {
- this.m_strMask = var1;
- }
-
- private String ParseMask() {
- String var1 = "";
- String var2 = "";
- char var3 = '\u0000';
- int var4 = 0;
-
- for(int var6 = 0; var6 < this.m_strMask.length(); ++var6) {
- var3 = this.m_strMask.charAt(var6);
- int var5 = var1.length();
- if (!this.IsMaskChar(var3)) {
- var1 = var1 + var3;
- } else {
- while(var5 == var1.length()) {
- if (var4 < this.m_strData.length()) {
- if (var3 == '9' && Character.isDigit(this.m_strData.charAt(var4)) || (var3 == 'A' || var3 == 'L' || var3 == 'U') && Character.isLetter(this.m_strData.charAt(var4)) || var3 == 'N' && Character.isLetterOrDigit(this.m_strData.charAt(var4)) || var3 == 'X') {
- var1 = var1 + this.m_strData.charAt(var4);
- if (var3 == 'L') {
- var2 = var2 + Character.toLowerCase(this.m_strData.charAt(var4));
- } else if (var3 == 'U') {
- var2 = var2 + Character.toUpperCase(this.m_strData.charAt(var4));
- } else {
- var2 = var2 + this.m_strData.charAt(var4);
- }
- }
-
- ++var4;
- } else {
- var1 = var1 + this.m_chPrompt;
- }
- }
- }
- }
-
- this.m_strData = var2;
- return var1;
- }
-
- private void FindNext() {
- CIconObjectList var1 = Globals.CUR_COURSE.m_pCurrentTask.GetResponseManager().m_listIcons;
- CIconObject var2 = null;
- CIconObject var3 = null;
- boolean var4 = false;
- boolean var5 = false;
-
- try {
- var2 = var1.GetHead();
- } catch (NoSuchElementException var7) {
- var4 = true;
- }
-
- while(!var4) {
- if (var2 != null && var2.m_nTypeID == 24) {
- if (var3 == null) {
- var3 = var2;
- } else if (var5) {
- var3 = var2;
- break;
- }
-
- if (var2.HasFocus()) {
- var5 = true;
- }
- }
-
- try {
- var2 = var1.GetNext();
- } catch (NoSuchElementException var6) {
- var4 = true;
- }
- }
-
- if (var3 != null && var5) {
- var3.GetFocus();
- }
-
- }
-
- public boolean HasFocus() {
- return this.m_bHasFocus;
- }
-
- public void AutoSelect() {
- this.m_nSelStart = 0;
- this.m_nCurrPos = this.GetOutputString().length();
- this.PlaceCursor(this.m_nCurrPos);
- }
-
- private String FormatData() {
- String var1 = "";
- if ((this.m_nFlags & 1024) != 0) {
- this.m_strData = this.m_strData.toUpperCase();
- } else if ((this.m_nFlags & 2048) != 0) {
- this.m_strData = this.m_strData.toLowerCase();
- }
-
- if (this.m_strMask.length() > 0) {
- var1 = this.ParseMask();
- } else {
- var1 = this.m_strData;
- }
-
- if ((this.m_nFlags & 512) != 0) {
- int var2 = var1.length();
- var1 = "";
-
- for(int var3 = 0; var3 < var2; ++var3) {
- var1 = var1 + "*";
- }
- }
-
- return var1;
- }
-
- private void FindPrev() {
- CIconObjectList var1 = Globals.CUR_COURSE.m_pCurrentTask.GetResponseManager().m_listIcons;
- CIconObject var2 = null;
- CIconObject var3 = null;
- boolean var4 = false;
- boolean var5 = false;
-
- try {
- var2 = var1.GetHead();
- } catch (NoSuchElementException var7) {
- var4 = true;
- }
-
- while(!var4) {
- if (var2 != null && var2.m_nTypeID == 24) {
- if (var2.HasFocus() && !var5) {
- if (var3 != null) {
- break;
- }
-
- var3 = var2;
- var5 = true;
- } else {
- var3 = var2;
- }
- }
-
- try {
- var2 = var1.GetNext();
- } catch (NoSuchElementException var6) {
- var4 = true;
- }
- }
-
- if (var3 != null) {
- var3.GetFocus();
- }
-
- }
-
- private int PlaceCursor(Point var1) {
- int var2 = 0;
- int var3 = 0;
- int var4 = this.m_rcDraw.x + 5;
- FontMetrics var5 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
- String var6 = this.FormatData();
-
- for(int var7 = 0; var7 < var6.length(); ++var7) {
- var2 = var5.charWidth(var6.charAt(var7));
- if (var1.x < var4 + var2 / 2) {
- var3 = var7;
- break;
- }
-
- if (var7 == var6.length() - 1) {
- var3 = var6.length();
- }
-
- var4 += var2;
- }
-
- this.m_rcInsertPt.x = var4;
- return var3;
- }
-
- private void PlaceCursor(int var1) {
- FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
- String var3 = this.FormatData();
- this.m_rcInsertPt.x = this.m_rcDraw.x + 5 + var2.stringWidth(var3.substring(0, var1));
- }
-
- public void SetPromptChar(char var1) {
- this.m_chPrompt = var1;
- }
-
- private boolean IsMaskChar(char var1) {
- return var1 == '9' || var1 == 'A' || var1 == 'N' || var1 == 'L' || var1 == 'U' || var1 == 'X';
- }
-
- public void SetFont(Font var1) {
- this.m_Font = var1;
- if (this.m_rcDraw != null) {
- FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
- this.m_rcInsertPt.reshape(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - var2.getHeight()) / 2, 2, var2.getHeight());
- this.m_ptText.move(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - (var2.getAscent() + var2.getDescent())) / 2 + var2.getAscent());
- }
-
- }
-
- public void SetColours(Color var1, Color var2) {
- this.m_rgbText = var1;
- this.m_rgbBackground = var2;
- }
-
- private String GetOutputString() {
- return this.m_strMask.length() > 0 ? this.m_strMask : this.m_strData;
- }
-
- public void LimitText(int var1) {
- this.m_nLimit = var1;
- }
-
- public void ReleaseFocus() {
- this.m_bHasFocus = false;
- }
-
- public boolean ProcessDblClk(Point var1) {
- this.m_nCurrPos = this.PlaceCursor(var1);
- this.m_nSelStart = this.SearchLeft(this.m_nCurrPos);
- this.m_nCurrPos = this.SearchRight(this.m_nSelStart);
- this.PlaceCursor(this.m_nCurrPos);
- this.DrawControl();
- return false;
- }
-
- public void SetRect(CRect var1) {
- FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
- this.m_rcDraw.reshape(var1);
- this.m_rcInsertPt.reshape(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - var2.getHeight()) / 2, 2, var2.getHeight());
- this.m_ptText.move(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - (var2.getAscent() + var2.getDescent())) / 2 + var2.getAscent());
- }
-
- public String GetData() {
- return this.m_strData;
- }
-
- private int SearchRight(int var1) {
- String var2 = this.GetOutputString();
- int var3 = var2.length();
- if (var1 >= 0 && var1 < var3) {
- while(var1 < var3 && var2.charAt(var1) == ' ') {
- ++var1;
- }
-
- var1 = var2.indexOf(32, var1);
- if (var1 == -1) {
- var1 = var3;
- } else {
- do {
- ++var1;
- } while(var1 < var3 && var2.charAt(var1) == ' ');
- }
- }
-
- return var1;
- }
-
- public boolean IsSelecting() {
- return this.m_bSelecting;
- }
-
- public boolean ProcessMouseUp(Point var1) {
- this.m_bSelecting = false;
- return false;
- }
-
- private int SearchLeft(int param1) {
- // $FF: Couldn't be decompiled
- }
-
- private int MaskPosToDataPos(int var1) {
- int var2 = 0;
-
- for(int var3 = 0; var3 < var1 && var3 < this.m_strMask.length(); ++var3) {
- if (!this.IsMaskChar(this.m_strMask.charAt(var3))) {
- ++var2;
- }
- }
-
- var1 -= var2;
- return var1;
- }
-
- private int DataPosToMaskPos(int var1) {
- for(int var2 = 0; var2 <= var1 && var2 < this.m_strMask.length(); ++var2) {
- if (!this.IsMaskChar(this.m_strMask.charAt(var2))) {
- ++var1;
- }
- }
-
- return var1;
- }
-
- public boolean ProcessKeyPress(int var1, Event var2) {
- if (this.m_keyNext.CheckKeyPress(var1, var2)) {
- this.FindNext();
- } else if (this.m_keyPrevious.CheckKeyPress(var1, var2)) {
- this.FindPrev();
- } else {
- switch (var1) {
- case 8:
- case 127:
- if ((this.m_nFlags & 64) == 0 && this.GetOutputString().length() > 0) {
- int var3;
- int var4;
- if (this.m_strMask.length() > 0) {
- var3 = this.MaskPosToDataPos(this.m_nCurrPos);
- var4 = this.MaskPosToDataPos(this.m_nSelStart);
- } else {
- var3 = this.m_nCurrPos;
- var4 = this.m_nSelStart;
- }
-
- if (var4 == var3) {
- if (var1 == 127) {
- this.m_strData = this.m_strData.substring(0, var3) + this.m_strData.substring(var3 + 1);
- } else {
- this.m_strData = this.m_strData.substring(0, var3 - 1) + this.m_strData.substring(var3);
- --var3;
- }
- } else {
- this.m_strData = this.m_strData.substring(0, Math.min(var3, var4)) + this.m_strData.substring(Math.max(var3, var4));
- var3 = Math.min(var3, var4);
- }
-
- if (this.m_strMask.length() > 0) {
- this.m_nSelStart = this.m_nCurrPos = this.DataPosToMaskPos(var3);
- } else {
- this.m_nSelStart = this.m_nCurrPos = var3;
- }
-
- this.PlaceCursor(this.m_nCurrPos);
- this.DrawControl();
- }
- case 9:
- case 10:
- case 27:
- case 999:
- case 1002:
- case 1003:
- case 1008:
- case 1009:
- case 1010:
- case 1011:
- case 1012:
- case 1013:
- case 1014:
- case 1015:
- case 1016:
- case 1017:
- case 1018:
- case 1019:
- break;
- case 1000:
- this.m_nCurrPos = 0;
- if (this.m_strMask.length() > 0) {
- this.m_nCurrPos = this.DataPosToMaskPos(this.m_nCurrPos);
- }
-
- if (!var2.shiftDown()) {
- this.m_nSelStart = this.m_nCurrPos;
- }
-
- this.PlaceCursor(this.m_nCurrPos);
- this.DrawControl();
- break;
- case 1001:
- this.m_nCurrPos = this.GetOutputString().length();
- if (this.m_strMask.length() > 0) {
- while(this.m_nCurrPos > 0 && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos - 1))) {
- this.m_nCurrPos += -1;
- }
- }
-
- if (!var2.shiftDown()) {
- this.m_nSelStart = this.m_nCurrPos;
- }
-
- this.PlaceCursor(this.m_nCurrPos);
- this.DrawControl();
- break;
- case 1004:
- case 1006:
- if (this.m_strMask.length() == 0 && this.m_nCurrPos > 0 || this.m_strMask.length() > 0 && this.MaskPosToDataPos(this.m_nCurrPos) > 0) {
- if (var2.controlDown()) {
- this.m_nCurrPos = this.SearchLeft(this.m_nCurrPos);
- } else {
- do {
- this.m_nCurrPos += -1;
- } while(this.m_strMask.length() > 0 && this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos)));
- }
- } else if ((this.m_nFlags & 16384) != 0 && this.m_strMask.length() > 0) {
- this.FindPrev();
- }
-
- if (!var2.shiftDown()) {
- this.m_nSelStart = this.m_nCurrPos;
- }
-
- this.PlaceCursor(this.m_nCurrPos);
- this.DrawControl();
- break;
- case 1005:
- case 1007:
- if (this.m_strMask.length() == 0 && this.m_nCurrPos < this.m_strData.length() || this.m_strMask.length() > 0 && this.MaskPosToDataPos(this.m_nCurrPos) < this.m_strData.length()) {
- if (var2.controlDown()) {
- this.m_nCurrPos = this.SearchRight(this.m_nCurrPos);
- } else {
- do {
- ++this.m_nCurrPos;
- } while(this.m_strMask.length() > 0 && this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos)) && this.MaskPosToDataPos(this.m_nCurrPos) < this.m_strData.length());
- }
- }
-
- if (!var2.shiftDown()) {
- this.m_nSelStart = this.m_nCurrPos;
- }
-
- this.PlaceCursor(this.m_nCurrPos);
- this.DrawControl();
- break;
- default:
- if ((this.m_nFlags & 64) == 0 && (this.m_nLimit == 0 || this.m_strData.length() < this.m_nLimit || this.m_nSelStart != this.m_nCurrPos)) {
- if (this.m_strMask.length() <= 0) {
- this.m_strData = this.m_strData.substring(0, Math.min(this.m_nSelStart, this.m_nCurrPos)) + String.valueOf((char)var1) + this.m_strData.substring(Math.max(this.m_nSelStart, this.m_nCurrPos));
- this.m_nSelStart = this.m_nCurrPos = Math.min(this.m_nSelStart, this.m_nCurrPos) + 1;
- } else {
- while(this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos))) {
- ++this.m_nCurrPos;
- this.m_nSelStart = this.m_nCurrPos;
- }
-
- if (this.m_nCurrPos != this.m_strMask.length()) {
- this.m_strData = this.m_strData.substring(0, Math.min(this.MaskPosToDataPos(this.m_nSelStart), this.MaskPosToDataPos(this.m_nCurrPos))) + String.valueOf((char)var1) + this.m_strData.substring(Math.max(this.MaskPosToDataPos(this.m_nSelStart), this.MaskPosToDataPos(this.m_nCurrPos)));
-
- for(this.m_nCurrPos = Math.min(this.m_nSelStart, this.m_nCurrPos) + 1; this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos)); ++this.m_nCurrPos) {
- }
- }
-
- if (this.m_nCurrPos == this.m_strMask.length() && (this.m_nFlags & 16384) != 0) {
- this.FindNext();
- }
-
- this.m_nSelStart = this.m_nCurrPos;
- }
-
- this.PlaceCursor(this.m_nCurrPos);
- this.DrawControl();
- }
- }
- }
-
- return true;
- }
-
- public boolean ProcessMouseDown(Point var1) {
- this.m_bSelecting = true;
- this.m_nSelStart = this.m_nCurrPos = this.PlaceCursor(var1);
- if (!this.HasFocus()) {
- this.GetFocus();
- } else {
- this.DrawControl();
- }
-
- return false;
- }
-
- public void SetKeyboardData(CKeyboard var1, CKeyboard var2) {
- this.m_keyPrevious = var1;
- this.m_keyNext = var2;
- }
-
- public boolean SetData(String var1) {
- if (this.m_strData.equals(var1)) {
- return false;
- } else {
- this.m_strData = var1;
- return true;
- }
- }
-
- CEditControl(int var1, CRect var2, boolean var3) {
- this.m_nFlags = var1;
- this.m_nSelStart = 0;
- this.m_nCurrPos = 0;
- this.m_rcSelection = new CRect();
- this.m_rcInsertPt = new CRect();
- this.m_ptText = new Point(0, 0);
- this.m_bHasFocus = var3;
- if (var2 != null) {
- FontMetrics var4 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
- this.m_rcDraw.reshape(var2);
- this.m_rcInsertPt.reshape(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - var4.getHeight()) / 2, 2, var4.getHeight());
- this.m_ptText.move(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - (var4.getAscent() + var4.getDescent())) / 2 + var4.getAscent());
- }
-
- if (var3 && (this.m_nFlags & 128) != 0) {
- this.m_nSelStart = 0;
- this.m_nCurrPos = this.GetOutputString().length();
- this.PlaceCursor(this.m_nCurrPos);
- }
-
- }
-
- private void SetSelection() {
- int var1 = 0;
- FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
- String var3 = this.FormatData();
- if (this.m_nSelStart < this.m_nCurrPos) {
- var1 = var2.stringWidth(var3.substring(0, this.m_nCurrPos)) - var2.stringWidth(var3.substring(0, this.m_nSelStart));
- this.m_rcSelection.reshape(this.m_rcInsertPt.x - var1, this.m_rcInsertPt.y, var1, this.m_rcInsertPt.height);
- } else {
- var1 = var2.stringWidth(var3.substring(0, this.m_nSelStart)) - var2.stringWidth(var3.substring(0, this.m_nCurrPos));
- this.m_rcSelection.reshape(this.m_rcInsertPt.x, this.m_rcInsertPt.y, var1, this.m_rcInsertPt.height);
- }
- }
- }
-